home *** CD-ROM | disk | FTP | other *** search
/ Amiga Games: Greatest Hits 1996 / Amiga Games: Greatest Hits 1996.iso / archive / userbox / publicdomain / edspell.lha / EdSpell / Rexx / CheckWord.epxx next >
Text File  |  1996-07-28  |  4KB  |  140 lines

  1. /************************************************************************/
  2. /*                                                                      */
  3. /*     File : CheckWord.epxx                                            */
  4. /*   Author : Martin Reddy                                              */
  5. /*     Date : 28/8/92                                                   */
  6. /*  Purpose : An ARexx script used to control the text editor EdWord    */
  7. /*     Note : This is part of the Spell Checking facility of EdWord     */
  8. /* Function : This script prompts the user for a string and then checks */
  9. /*            to see if this string is in the dictionary. The user is   */
  10. /*            informed of the result and, if the word was not found,    */
  11. /*            then upto 4 possible suggestions are made.                */
  12. /*  Updates : [28/7/96] - Check for no word, ignore valid roots, add    */
  13. /*                        word to dictionary, edit word in-situ         */
  14. /*                                                                      */
  15. /************************************************************************/
  16.  
  17.  
  18.     /* Set IGNORE_VALID_ROOTS to TRUE if you want the spell check to
  19.        ignore words which aren't in the dictionary, but do have a
  20.        valid root, e.g. ignore WASTED if the word WASTE exists in the
  21.        dictionary. This reduces the need to have every tense of a
  22.        word, and plurals, to be explicitly stored in the dictionary */
  23.         
  24.     IGNORE_VALID_ROOTS = TRUE
  25.  
  26.  
  27.     /*-------------- Nothing To Change Below Here -----------*/
  28.  
  29.     HOST = ADDRESS()
  30.     ADDRESS VALUE HOST
  31.  
  32.     OPTIONS RESULTS
  33.  
  34.     /********** Make sure that the ISpell process is up *********/
  35.  
  36.     IF ~SHOW( PORTS, 'IRexxSpell' ) THEN DO
  37.         Message "Loading Dictionary..."
  38.         ADDRESS COMMAND 'run <nil: >nil: EdSpell:ISpell/ispell -r >nil: <nil:'
  39.         ADDRESS COMMAND 'EdSpell:ISpell/WaitForPort IRexxSpell'
  40.         IF RC ~= 0 THEN DO
  41.             Inform "Could Not Start ISpell Process|Spell Check Aborted!"
  42.             CALL MyExit
  43.         END
  44.     END
  45.  
  46.     /**************** Get a Word From The User *****************/
  47.  
  48.     Message "Spell Checking Current Word..."
  49.  
  50.     GetWord
  51.     THEWORD = RESULT
  52.     SEARCHWORD = COMPRESS( UPPER(THEWORD), '~`,./<>?;:"[]{}!@#$%^&*()+|=\- ' )
  53.     If ( SEARCHWORD == '' ) | ( THEWORD == 'RESULT' ) THEN DO
  54.         Inform "No Word Under Cursor"
  55.         CALL MyExit
  56.     END
  57.  
  58.     /**************** Now check the word ****************/
  59.  
  60.     REPEAT_CHECK = TRUE
  61.     FIRST_CHECK  = TRUE
  62.     DO UNTIL REPEAT_CHECK = FALSE
  63.  
  64.         REPEAT_CHECK = FALSE
  65.  
  66.         ADDRESS "IRexxSpell" CHECK SEARCHWORD
  67.         WORD = RESULT
  68.  
  69.         IF ( WORD == "*" ) | ( (LEFT(WORD,1) == "+") & (IGNORE_VALID_ROOTS == TRUE) ) THEN DO
  70.             IF FIRST_CHECK == TRUE THEN DO
  71.                 Inform SEARCHWORD" Found In Dictionary|Word Is Spelt Correctly"
  72.             END
  73.             CALL MyExit
  74.         END; ELSE IF LEFT(WORD,1) == "+" THEN DO
  75.             PARSE VAR WORD DUMMY ROOT
  76.             Choice SEARCHWORD" Is A Valid Combination|But Is Not In Dictionary|(Root Word Is "||COMPRESS(ROOT,' ')||")@@Okay|Edit|Add"
  77.         END; ELSE IF LEFT(WORD,1) == "&" THEN DO
  78.             PARSE VAR WORD DUMMY SUGA SUGB SUGC SUGD SUGE
  79.  
  80.             SUG = "|1) "SUGA
  81.             IF (SUGB ~= "END") & (SUGB ~= "") & (SUGB ~= "SUGB") THEN DO
  82.                 SUG = SUG||"|2) "||SUGB
  83.             END
  84.             IF (SUGC ~= "END") & (SUGC ~= "") & (SUGC ~= "SUGC") THEN DO
  85.                 SUG = SUG||"|3) "||SUGC
  86.             END
  87.             IF (SUGD ~= "END") & (SUGD ~= "") & (SUGD ~= "SUGD") THEN DO
  88.                 SUG = SUG||"|4) "||SUGD
  89.             END
  90.  
  91.             Choice SEARCHWORD" Not In Dictionary|Possible Suggestions Are:|"||SUG||"@@Okay|Edit|Add"
  92.         END; ELSE DO
  93.             Inform SEARCHWORD" Not In Dictionary|No Possible Suggestions Found"
  94.             CALL MyExit
  95.         END
  96.  
  97.         IF RC == 0 THEN DO
  98.             CALL AddWord( SEARCHWORD )
  99.         END; ELSE IF RC == 2 THEN DO
  100.             CALL EditWord
  101.             REPEAT_CHECK = TRUE
  102.             Message "Spell Checking New Replacement..."
  103.         END
  104.  
  105.         FIRST_CHECK = FALSE
  106.  
  107.     END
  108.  
  109.     CALL MyExit
  110.  
  111.     /************ PROCEDURE: "AddWord(word)" ************/
  112.  
  113.     AddWord: PROCEDURE
  114.     PARSE ARG THEWORD
  115.         Choice "Please Confirm The Addition of|"||THEWORD||" To The Dictionary.@@Add Word|Cancel"
  116.         IF RC ~= 0 THEN DO
  117.             ADDRESS "IRexxSpell" ADD THEWORD
  118.         END
  119.     RETURN
  120.  
  121.     /************ PROCEDURE: "EditWord()" ************/
  122.  
  123.     EditWord: PROCEDURE EXPOSE SEARCHWORD
  124.         GetInput "Type New Spelling For Word (Blank=Abort)"
  125.         NEWWORD = RESULT
  126.         IF ( NEWWORD == "RESULT" ) | ( NEWWORD == "" ) THEN CALL MyExit
  127.         DeleteWord
  128.         InsertText D2C(34)||NEWWORD||" "||D2C(34)
  129.         MovePrevWord
  130.         SEARCHWORD = UPPER( NEWWORD )
  131.     RETURN
  132.  
  133.     /************ PROCEDURE: "MyExit()" ************/
  134.  
  135.     MyExit: PROCEDURE
  136.         Message ""
  137.         EXIT
  138.     RETURN
  139.  
  140.